home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Magazine / C_Tutorial / Part-13 / PatchLib / source / SetPatchProjectA.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-01  |  2.4 KB  |  86 lines

  1. /*
  2. **    patch.library
  3. **
  4. **    Copyright © 1993-1997 by Stefan Fuchs
  5. **        Freely distributable.
  6. */
  7.  
  8. #ifndef _PATCH_INCLUDES_H
  9. #include "patch_includes.h"
  10. #endif
  11.  
  12.  
  13. /****** patch.library/SetPatchProjectA ***************************************
  14. *
  15. *   NAME
  16. *        SetPatchProjectA -- Changes certain attributes of a project. (V5)
  17. *        SetPatchProject -- varargs stub for SetPatchProjectA(). (V5)
  18. *
  19. *   SYNOPSIS
  20. *        Error = SetPatchProjectA( project, taglist )
  21. *        D0                        A0       A1
  22. *
  23. *        ULONG Error SetPatchProjectA( APTR, struct TagItem *);
  24. *
  25. *        Error = SetPatchProject( project, ...)
  26. *
  27. *        ULONG Error SetPatchProject( APTR, ...);
  28. *
  29. *   FUNCTION
  30. *        Changes certain attributes of a group of patches belonging to one
  31. *        project. For now (V5) it mainly calls SetPatch() recursive for
  32. *        all patches belonging to the project.
  33. *        Certain project specific tags may be implemented later.
  34. *
  35. *   INPUTS
  36. *        project = pointer to a patch project obtained via
  37. *                  CreatePatchProject() or NULL for no action
  38. *        taglist = pointer to array of tags
  39. *
  40. *   TAGS
  41. *        see SetPatch() for a list of valid tags.
  42. *
  43. *   RESULT
  44. *        Error = errorcode as defined in patch.h.
  45. *                see SetPatch() for a list of errorcodes
  46. *
  47. *   NOTES
  48. *        Currently (V5) SetPatchProject() stops changing patches, when any of
  49. *        the internal calls to SetPatch() return an error. Therefore when
  50. *        SetPatchProject() returns an error, some patches may have been
  51. *        changed and others not.
  52. *
  53. *   BUGS
  54. *
  55. *   SEE ALSO
  56. *        SetPatch(), patch.h, patchtags.h, CreatePatchProject()
  57. *
  58. ******************************************************************************
  59. *
  60. */
  61.  
  62. ULONG LIBFUNC SetPatchProjectA( REGA0 struct PatchProject *project GNUC_REGA0, REGA1 struct TagItem *taglist GNUC_REGA1)
  63. {
  64. ULONG Error;
  65. struct Patch *patch;
  66. struct Node *pointer;
  67.  
  68.     if (project)
  69.     {
  70.         for (pointer = (struct Node *)project->PPR_PatchListHeader.lh_Head;
  71.              pointer->ln_Succ;
  72.              pointer = (struct Node *)pointer->ln_Succ)
  73.         {
  74.             patch = (struct Patch *) (((UBYTE *)pointer) -offsetof(struct Patch, PS_ProjectNode.mln_Succ));
  75.             if( project->PPR_Flags & PPRF_InternalCall)
  76.                 patch->PS_Flags |= PSF_InternalCall;
  77.             Error = SetPatchA(patch, taglist);
  78.             if (Error) return(Error);
  79.         }
  80.         project->PPR_Flags &= ~PPRF_InternalCall;
  81.  
  82.     }
  83.     return(NULL);
  84.  
  85. }
  86.